﻿using BLL.Sgf;
using BLL.Utility;
using Entity.Models;
using Sgf.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Sgf.View
{
    public partial class RegistroGanho : AbstractPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UcBotoesCadastro.btnSalvarClick += btnSalvar_Click;
            UcBotoesCadastro.btnLimparCLick += btnLimpar_Click;
            pnErro.Visible = false;

            if (IsPostBack) return;
            PopulaCategoria();
            txtDataRecebimento.Text = DateTime.Today.ToString();
        }

        #region -- Botoes --
        private void btnLimpar_Click(object sender, EventArgs e)
        {
            var campos = new Campos();
            campos.LimparTextBox(this);
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            var pEntity = GetEntity();
            try
            {
                using (var bll = new RecebimentoBLL())
                {
                    bll.Salvar(pEntity);
                    ExibeMensagem("Operação realizada com sucesso.");
                    btnLimpar_Click(sender, e);
                }
            }
            catch (EValidationException evx)
            {
                lbMsg.Text = evx.Message;
                btnLimpar_Click(sender, e);
                pnErro.Visible = true;
            }
            catch (Exception ex)
            {
                throw new Exception("btnSalvar_Click :: " + ex.Message, ex);
            }
        }

        protected void btnPopupSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                var pEntity = SetEntity();
                using (var bll = new CategoriaRecebimentoBLL())
                {
                    bll.Salvar(pEntity);
                    btnLimpar_Click(sender, e);
                    PopulaCategoria();
                    ExibeMensagem("Operação realizada com sucesso");
                }
            }
            catch (EValidationException evx)
            {
                lbMsg.Text = evx.Message;
                pnErro.Visible = true;
                btnLimpar_Click(sender, e);

            }
            catch (Exception ex)
            {
                throw new Exception("btnPopupSalvar_Click :: " + ex.Message, ex);
            }
        }

        #endregion

        #region -- Metodos Privados --
        private CategoriaRecebimento SetEntity()
        {
            var pEntity = new CategoriaRecebimento
            {
                Descricao = txtNovaModalidade.Text,
                UsuarioId = Convert.ToInt32(Session["UsuarioId"].ToString())
            };
            return pEntity;
        }

        private Recebimento GetEntity()
        {
            var pEntity = new Recebimento
            {
                CategoriaRecebimentoId = Convert.ToInt32(ddlTipoGanho.SelectedValue),
                ValorRecebido = Convert.ToDecimal(txtValorRecebido.Text),
                DataRecebimento = Convert.ToDateTime(txtDataRecebimento.Text),
                UsuarioId = Convert.ToInt32(Session["UsuarioId"])
            };
            return pEntity;
        }

        private void PopulaCategoria()
        {
            try
            {
                using (var bll = new CategoriaRecebimentoBLL())
                {
                    ddlTipoGanho.DataSource = bll.BuscaTodos(Convert.ToInt32(Session["UsuarioId"].ToString()));
                    ddlTipoGanho.DataValueField = "id";
                    ddlTipoGanho.DataTextField = "descricao";
                    ddlTipoGanho.DataBind();
                }
                ddlTipoGanho.Items.Insert(0, new ListItem("(Selecione)", "0"));
            }
            catch (Exception ex)
            {
                throw new Exception("Recebimento.aspx:PopulaCategoria ::" + ex.Message, ex);
            }
        }

        private void LimparCampos()
        {
            txtValorRecebido.Text = string.Empty;
            txtNovaModalidade.Text = string.Empty;
            txtDataRecebimento.Text = DateTime.Today.ToString();
            ddlTipoGanho.SelectedValue = "0";
        }
        #endregion

    }
}